在上一章節中,筆者講解了如和切換使用者以及取得最高的root使用者權限,接下來要講解的是本地端主機的使用者管理。
新增使用者可以使用useradd
指令做到,而修改使用者相關的資訊可以使用usermod
來做到,相關的使用者設定的資訊、預設密碼設定、以及使用者預設的規則設定等,都存放在/etc/login.defs
的設定檔案裡,相關的指令執行方式如下:
[rockylinux@workstation ~]$ sudo useradd user1
[sudo] password for rockylinux:
[rockylinux@workstation ~]$ ls /home/
rockylinux user1
[rockylinux@workstation ~]$ cat /etc/passwd | grep user1
user1:x:1001:1001::/home/user1:/bin/bash
從上面的輸出訊息可以知道,useradd
是只有root使用者權限才可以使用的,因此需要切換成root使用者或是使用sudo
指令來暫時取得root使用者權限才可以,當新增好user1
使用者之後,則對應的user1
家目錄以及進入的shell都已經設定好了,可以在/etc/passwd
裡面的檔案看到,那預設會亂數一個密碼給user1
,因此我們並不知道預設給user1密碼是什麼,因此還需要使用passwd
指令來設定user1
之密碼,當然因為不知道預設密碼是什麼,因此需要使用root使用者來做設定,假設設定給user1
之新的密碼為rocky
,則相關的執行指令如下:
[rockylinux@workstation ~]$ sudo passwd user1
[sudo] password for rockylinux:
Changing password for user user1.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[rockylinux@workstation ~]$
若新增好的使用者要做修改,則可以使用usermod
指令來做到,相關可以修改使用者資訊的參數如下:
-c
或是--comment
:修改對於這個使用者的註解,參數後面接一個字串。-g
或是--gid
:修改使用者對應的自己主要群組名稱,參數後面接使用者名稱與群組名稱。-G
或是--groups
:新增使用者到指定的群組,參數後面接群組名稱。-a
或是--append
:將使用者以附加的方式加入倒指定的群組中,參數後面接群組名稱。-d
或是--home
:指定一個新的使用者家目錄,參數後面接家目錄之路徑。-m
或是--move-home
:將原本使用者的家目錄搬移到新的指定的家目錄中,參數後面接家目錄路徑。-s
或是--shell
:指定使用者登入所使用的shell名稱,參數後面接shell之執行路徑。-L
或是--lock
:將指定的使用者鎖定,被鎖定的使用者將無法登入與使用。-U
或是--unlock
:將指定的使用者解除鎖定。下面有幾個範例來演示使用usermod
來設定與修改指定的使用者相關資訊:
[rockylinux@workstation ~]$ sudo usermod -c "user1 comment" user1
[sudo] password for rockylinux:
[rockylinux@workstation ~]$ sudo usermod --lock user1
[rockylinux@workstation ~]$
[rockylinux@workstation ~]$ su - user1
Password:
su: Authentication failure
[rockylinux@workstation ~]$ sudo usermod --unlock user1
[rockylinux@workstation ~]$ su - user1
Password:
[user1@workstation ~]$ logout
[rockylinux@workstation ~]$
最後,總結一下當一個使用者被root使用者新增之後,會做到那些事情:
/etc/passwd
檔案中。/etc/group
檔案中。/etc/shadow
檔案中。/etc/gshadow
檔案中。/home
目錄底下。/var/spool/mail
之目錄底下。當使用useradd
指令來新增使用者的時候,若沒有指定user id,則會在新增使用者的時候,隨意的新增一個,而也可以自己指定,要注意的是,在指定user id的時候,有範圍性的,相關的id範圍列表如下:
當使用者不需要使用,可以考慮將使用者刪除,這時候就會使用userdel
來刪除,要完整地將使用者刪除,則需要加上-r
參數做搭配,相關的指令執行後的資訊如下:
[rockylinux@workstation ~]$ sudo userdel -r user1
[rockylinux@workstation ~]$
刪除使用者之後,唯一需要注意的是,當新增使用者時候,不要指定之前給定過user id的使用者,因為有可能之後的新增使用者會繼承之前user id對應的使用者,導致之前的檔案與相關目錄都可以存取,為了不必要麻煩,要確保先前的使用者所有相關的目錄與檔案都已經刪除,相關的範例說明如下:
[rockylinux@workstation ~]$ sudo useradd user1
[rockylinux@workstation ~]$ touch user1.txt
[rockylinux@workstation ~]$ sudo chown user1:user1 user1.txt
[rockylinux@workstation ~]$
[rockylinux@workstation ~]$ ls -al user1.txt
-rw-rw-r--. 1 user1 user1 0 Sep 25 15:03 user1.txt
[rockylinux@workstation ~]$ id -u user1
1001
[rockylinux@workstation ~]$ sudo userdel -r user1
[rockylinux@workstation ~]$ ls -al user1.txt
-rw-rw-r--. 1 1001 1001 0 Sep 25 15:03 user1.txt
[rockylinux@workstation ~]$ sudo useradd user2
[rockylinux@workstation ~]$ id -u user2
1001
[rockylinux@workstation ~]$ ls -al user1.txt
-rw-rw-r--. 1 user2 user2 0 Sep 25 15:03 user1.txt
[rockylinux@workstation ~]$
從上面的執行指令的輸出範例,就可以說明user id這件事情了,也證明系統是看user id,而不是給定的使用者名稱。
在前面的章節中,談論到/etc/passwd裡面的格式與說明每個使用者相關的設定,這邊在做更進一步有關於/etc/shadow
檔案的介紹:
rockylinux:$6$PPjj5FZ1HiJa1Wsl$9SIRj2kUaBoHrwKUILn7id1EdlKGI0BR3NV4gMlfmCY5qTuR2Fp5wx2lS1J1JCeboIV1HC8MadwHmDpHEGYaA1:18893:0:99999:7:::
從上面的設定來看,這是有關於rockylinux使用者的密碼設定,並存放在/etc/shadow
檔案裡面,詳細的說明如下:
rockylinux
是使用者名稱。$6$PPjj5FZ1HiJa1Wsl$9SIRj2kUaBoHr-wKUILn7id1EdlKGI0BR3NV4gMlfmCY5qTuR2Fp5wx2lS1J1JCeboIV1HC8MadwHmDpHEGYaA1
上述的雜湊密碼格式如下:
由於本書不是與資訊安全有關的主題,因此筆者認為密碼的格式知道就好。
可以使用下列的指令做到將某一個指定的使用者進行密碼有效期的設定,相關的指令執行如下:
[rockylinux@workstation ~]$ sudo chage -E "2021-09-25" user02
[rockylinux@workstation ~]$ su - user2
Password:
Your account has expired; please contact your system administrator
su: User account has expired
[rockylinux@workstation ~]$
上述指令是利用-E
來指定什麼時候這個使用者過期,若要設定幾天之後過期,可以使用date指令取得指定的天數之後過期,相關指令如下:
[rockylinux@workstation ~]$ date -d "+30 days" +%F
2021-10-25
從上述的指令可以知道,假設今天是2021-09-25,而設定要30天到期的日期是:2021-10-25,這樣就可以取得指定的時間之到期的日期了。
若要強制使用者在一開始登入之後便要改密碼,則可以使用下列的指令方式做到:
[rockylinux@workstation ~]$ sudo chage -d 0 user2
[rockylinux@workstation ~]$ su - user2
Password:
You are required to change your password immediately (administrator enforced)
Current password:
New password:
Retype new password:
[user2@workstation ~]$
有些使用者不能讓其登入,並可以使用shell,可以使用下列指令做到:
[rockylinux@workstation ~]$ sudo usermod -s /usr/sbin/nologin user2
[rockylinux@workstation ~]$
[rockylinux@workstation ~]$ su - user2
Password:
This account is currently not available.
[rockylinux@workstation ~]$
除了使用/usr/sbin/nologin設定之外,另外也可以使用/usr/bin/false來做到,當這樣設定之後,則使用者便不可以登入方式啟動shell才進行存取了。
rocky
給peter與alice使用者。